神奇的珂朵莉树,优雅的暴力。
珂朵莉树的主要思想就是对于一段连续的值相同的区间,将其缩为一个结点,然后丢到 $set$ 里面,主要的操作有拆分区间操作…….这货很强大,码量不短但极好写,而且一般不会出什么问题,调试也很方便。
但是珂朵莉树的思想很暴力,比如说区间第 $K$ 大,珂朵莉树的做法就是直接将区间拿出来排一波序!当然,这样暴力的东西只能在随机数据的情况下食用,或者数据水的情况下,不然分分钟给你 $T$ 飞!
好吧来看看这道题的操作该怎么办:
第一个操作的话属于傻逼操作,珂朵莉树,先 $split$ 提取 $l,r$ 区间,然后直接暴力访问,加上 $x$ 即可。
第二个操作完全就是珂朵莉树的基本操作,跟上面一样,暴力访问然后直接将权值改为 $x$ 即可,更简单的方法就是删除 $l,r$ 区间,然后把权值统一为 $x$ 后再插入 $l,r$ 。
第三个操作第 $K$ 大,上面说了,直接拿出来排个序就好了,炒鸡暴力。
第四个操作……仍然是暴力,可以参考第一二个操作,注意 $longlong$ 的问题,不要爆 $long long$ 了。
对于初始的序列,我们先用题目要求的随机化函数得到序列中每一个位置的值,然后插入到 $set$ 中,这个时候第 $i$ 个元素区间是 $i,i$ 。
还有一个需要注意的地方,就是在插入完整个序列后还要在最后面插入一个边界的哨兵结点,当然哨兵结点的权值为 $0$ 。
Code:
1 |
|
本文标题:【题解】 Willem, Chtholly and Seniorious 珂朵莉树 luoguCF896C
文章作者:Qiuly
发布时间:2019年03月11日 - 00:00
最后更新:2019年03月29日 - 13:52
原始链接:http://qiulyblog.github.io/2019/03/11/[题解]luoguCF896C/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。